10 REM FRACSCAPES 64 20 REM OR 30 REM 3-D FRACTAL LANDSCAPES 40 REM 50 REM BY MICHIEL VAN DE PANNE 60 REM FROM THE JULY ISSUE OF CREATIVE 70 REM COMPUTING (R.I.P.) 80 REM 90 REM HACKED UNMERCIFULLY AND 100 REM MODIFIED FOR THE AMIGA FROM 110 REM THE MAC VERSION BY 120 REM DAVID MILLIGAN, 70707,2521 130 REM AND TED INGALLS 140 REM 10-19-85 150 REM 160 REM ** THIS PROGRAM WILL CONSTRUCT 170 REM ** A REALISTIC 3-D LANDSCAPE 180 REM ** FRACTAL FROM MANY RANDOM 190 REM ** NUMBERS IN UP TO SEVEN 200 REM ** LEVELS OF DETAIL,SIMULATING 210 REM ** MOUNTAIN RANGES, COASTLINES 220 REM ** SEA FLOOR AND/OR SURFACES, 230 REM ** LAKES,ISLANDS,ETC. 240 REM ** ONCE THE ARRAY USED TO DO 250 REM ** THE DRAWING IS CREATED,IT 260 REM ** CAN BE SAVED TO DISK AND 270 REM ** RELOADED AND RE-DRAWN. 280 REM ** WE SAVED THE ARRAY RATHER 290 REM ** THAN THE SCREEN BECAUSE: 300 REM ** (1) WE COULDN'T FIGURE OUT 310 REM ** HOW TO FIND THE START OF 320 REM ** SCREEN MEMORY FROM ABASIC 330 REM ** AND COULDN'T GET A 640X200 340 REM ** SCREEN STUFFED INTO AN 350 REM ** ARRAY, AND 360 REM ** (2) THE ARRAY CAN BE 370 REM ** RE-DRAWN WITH DIFFERENT 380 REM ** SCALING FACTORS FOR 390 REM ** PERSPECTIVE CHANGES AND 400 REM ** WITH SEA LEVEL ON OR OFF 410 REM ** (DEFAULT IS OFF). 420 REM ** THE LENGTH OF TIME REQUIRED 430 REM ** TO DRAW AN ARRAY DEPENDS 440 REM ** ON THE NUMBER OF LEVELS 450 REM ** SELECTED. FOR EACH INCREASE 460 REM ** IN LEVEL THE NUMBER OF 470 REM ** TRIANGULAR SUBDIVISIONS IS 480 REM ** QUADRUPLED. A LEVEL 7 490 REM ** LANDSCAPE HAS THE HIGHEST 500 REM ** 'RESOLUTION', BUT TAKES 510 REM ** OVER AN HOUR TO DRAW. 520 REM 530 REM ** ONE OF THE MAIN THINGS WE 540 REM ** ADDED TO THE ORIGINAL 550 REM ** PROGRAM WAS COLOR. THE 12 560 REM ** COLORS ARE SELECTED BY WHAT 570 REM ** WE DETERMINED WAS ALTITUDE 580 REM ** TO RENDER FORESTS,WATER 590 REM ** SNOW, DIRT, ETC. 600 REM ** CONSIDERING WE UNDERSTAND 610 REM ** VITUALLY NOTHING OF THE 620 REM ** MATH INVOLVED, IT WORKS 630 REM ** PRETTY WELL. 640 REM ** IF YOU'VE GOT A BETTER 650 REM ** IDEA, HAVE AT IT. 660 REM ** THIS PROGRAM IS DEFINATELY 670 REM ** NOT POLISHED,OPTIMIZED OR 680 REM ** BUG FREE, BUT IT IS FUN TO 690 REM ** PLAY WITH. 700 REM ** WHILE I DON'T UNDERSTAND 710 REM ** THEM, I FIND FRACTAL 720 REM ** GRAPHICS GENERATION 730 REM ** FASCINATING. IF YOU'VE GOT 740 REM ** A NIFTY FRACTAL PROGRAM, 750 REM ** UPLOAD IT HERE OR SING OUT 760 REM ** VIA E-MAIL. 770 REM 780 REM DAVID MILLIGAN, 70707,2521 790 REM ****************************** 800 REM 810 REM ** FRACSCAPE 64 WOULD NOT BE 820 REM AS NICE WITHOUT THE HIGH 830 REM RESOLUTION GRAPHICS UTILITY 831 REM ($C000-$C81F) 840 REM BY GARY KIZIAK FROM VOLUME 850 REM 5,ISSUE 6 OF TRANSACTOR 860 REM MAGAZINE. ****THANKS******** 872 REM THE REST OF FILE 'HIHIRES' 873 REM IS A HIRES SCREEN DUMP 874 REM PROGRAM ($C820-$CAA0) 875 REM 880 REM ** THIS PROGRAM WAS CONVERTED 890 REM FROM AMIGA ABASIC FOR THE C64 900 REM BY DOUG COWARD (DONQUIXOTE ON 910 REM Q-LINK) 920 REM 930 REM THE LOSS OF COLOR THAT THE 940 REM AMIGA IS CAPABLE OF DOES NOT 950 REM TAKE AWAY FROM THE BEAUTY OF 960 REM THESE FRACTALS. 970 REM STANDARD BITMAP MODE DRAWS IN 980 REM ONE COLOR (I PICKED DK. GRAY) 990 REM MULTICOLOR MODE DRAWS IN THREE 1000 REM COLORS ( DK.GRAY,BLUE,GREEN OR 1010 REM DK.GRAY,GREEN,WHITE) 1020 REM 1030 REM PN= ** COLORS ** 1040 REM SEALEVEL= 0 1 0 1 1050 REM MC=MULCOLOR 0 0 1 1 1060 REM 0 BACKGROUND 14 14 14 14 1070 REM 1 FOREGROUND 11 11 5 6 1080 REM 2 MULTICOLOR1 -- -- 11 5 1090 REM 3 MULTICOLOR2 -- -- 1 11 1100 REM 4 BORDER 14 14 14 14 1110 REM -------------------------- 1120 REM 1 = WHITE (SNOW) 1130 REM 6 = BLUE (WATER) 1140 REM 11= DARK GRAY (ROCK) 1150 REM 5 = GREEN (FOREST) 1160 REM 14= LIGHT BLUE (SKY) 1170 REM 1180 REM THIS PROGRAM CAN BE IMPROVED. 1190 REM IF YOU HAVE IMPROVEMENTS OR IF 1200 REM UNDERSTAND THE MATH OF FRACTAL 1210 REM SEND E-MAIL. ** ENJOY ** 1220 REM DOUG COWARD 1230 REM ============================= 1235 IF A=0 THEN A=1:LOAD "HIHIRES",8,1 1240 HI=12*4096:DR=HI+3:PL=DR+3:MO=PL+3:CL=MO+3:DM=CL+3: 1250 SC=DM+3:CO=SC+3:BO=CO+3:TE=BO+3:PR=TE+3:CH=PR+3:TR=CH+3 1260 PRINTCHR$(147):SYSTRAP:PI=3.14159:GOSUB1430:PRINT CHR$(158) 1270 PRINT" FRACSCAPES 64" 1280 PRINT" THIS PROGRAM WAS CONVERTED FROM AMIGA " 1290 PRINT" ABASIC FOR THE C64 BY DOUG COWARD" 1300 PRINT" (DONQUIXOTE)" 1310 PRINT" SELECT STANDARD HIRES":PRINT" (ONE COLOR)" 1320 PRINT" OR SELECT MULTICOLOR BITMAP MODE FOR" 1330 PRINT" THREE COLORS AT LOWER RESOLUTION" 1340 REM *** PROGRAM INITIALIZATION *** 1350 PRINT" INITIALIZING ARRAYS" 1360 DIMD(64,33):LE=0 1370 GOSUB4870:FORI=1TO2000:NEXT:GOTO3120 1380 REM ============================== 1390 REM *** WAIT FOR ANY KEY *** 1400 GETA$:IFA$=""THEN1400 1410 RETURN 1420 REM ============================== 1430 REM *** SET INITIAL COLORS *** 1440 POKE53280,14:POKE53281,14 1450 C1=11:C2=1:C3=6 1460 RETURN 1470 REM ============================== 1480 REM CALCULATE ARRAY DATA AND INSERT 1490 PRINT" WORKING ON LEVEL " 1500 DT=2:FORN=1TOLE:DT=DT+2^(N-1):NEXTN 1510 MX=DT-1:MY=MX/2:RH=PI*30/180:VT=RH*1.2 1520 FORN=1TOLE:L=10000/1.8^N 1530 PRINT:PRINT" ";N 1540 IB=MX/2^N:SK=IB*2 1550 GOSUB1610:REM ASSIGN HEIGHTS ALONG X IN ARRAY 1560 GOSUB1690:REM *** ASSIGN HEIGHTS ALONG Y *** 1570 GOSUB1770:REM *** ASSIGN HEIGHTS ALONG Z *** 1580 NEXTN 1590 PRINTCHR$(147):GOTO3030 1600 REM ============================= 1610 REM *** HEIGHTS ALONG X *** 1620 FORYE=0TOMX-1STEPSK 1630 FORXE=IB+YETOMXSTEPSK 1640 AX=XE-IB:AY=YE:GOSUB1860:D1=D:AX=XE+IB:GOSUB1860:D2=D 1650 D=(D1+D2)/2+RND(1)*L/2-L/4:AX=XE:AY=YE:GOSUB1920 1660 NEXTXE 1670 NEXTYE:RETURN 1680 REM ============================= 1690 REM *** HEIGHTS ALONG Y *** 1700 FORXE=MXTO1STEP-SK 1710 FORYE=IBTOXESTEPSK 1720 AX=XE:AY=YE+IB:GOSUB1860:D1=D:AY=YE-IB:GOSUB1860:D2=D 1730 D=(D1+D2)/2+RND(1)*L/2-L/4:AX=XE:AY=YE:GOSUB1920 1740 NEXTYE 1750 NEXTXE:RETURN 1760 REM ============================= 1770 REM *** HEIGHTS ALONG Z *** 1780 FORXE=0TOMX-1STEPSK 1790 FORYE=IBTOMX-XESTEPSK 1800 AX=XE+YE-IB:AY=YE-IB:GOSUB1860:D1=D 1810 AX=XE+YE+IB:AY=YE+IB:GOSUB1860:D2=D 1820 AX=XE+YE:AY=YE:D=(D1+D2)/2+RND(1)*L/2-L/4:GOSUB1920 1830 NEXTYE 1840 NEXTXE:RETURN 1850 REM ============================= 1860 REM *** RETURN DATA FROM ARRAY *** 1870 IFAY>MYTHEN1890 1880 BY=AY:BX=AX:GOTO1900 1890 BY=MX+1-AY:BX=MX-AX 1900 D=D(BX,BY):RETURN 1910 REM ============================= 1920 REM *** PUT DATA INTO ARRAY *** 1930 IFAY>MYTHEN1950 1940 BY=AY:BX=AX:GOTO1960 1950 BY=MX+1-AY:BX=MX-AX 1960 D(BX,BY)=D:RETURN 1970 REM ============================= 1980 REM *** SEA LEVEL SECTION *** 1990 IFSEALEVEL=0THENGOSUB2190:RETURN 2000 IFXO<>-999THEN2030 2010 IFZZ<0THENGOSUB2410:Z2=ZZ:ZZ=0:GOTO2170 2020 GOSUB2450:GOTO2160 2030 IFZ2>0ANDZZ>0THENGOSUB2190:GOTO2160 2040 IFZ2<0ANDZZ<0THENZ2=ZZ:ZZ=0:GOTO2170 2050 W3=ZZ/(ZZ-Z2):X3=(X2-XX)*W3+XX:Y3=(Y2-YY)*W3+YY:Z3=0 2060 ZT=ZZ:YT=YY:XT=XX 2070 IFZZ>0THEN2130 2080 REM ============================= 2090 REM *** GOING INTO WATER *** 2100 ZZ=Z3:YY=Y3:XX=X3:GOSUB2710 2110 GOSUB2410:ZZ=0:YY=YT:XX=XT:Z2=ZT:GOTO2170 2120 REM ============================= 2130 REM *** COMING OUT OF WATER *** 2140 ZZ=Z3:YY=Y3:XX=X3:GOSUB2710 2150 GOSUB2450:ZZ=ZT:YY=YT:XX=XT 2160 Z2=ZZ 2170 X2=XX:Y2=YY:RETURN 2180 REM ============================= 2190 REM *** NEW COLOR SUBROUTINE *** 2200 IFZZ<0THENGOTO2330 2210 REM IF ZZ>950 THEN PENA 2:RETURN 2220 REM IF ZZ>850 THEN PENA 3:RETURN 2230 REM IF ZZ>750 THEN PENA 4:RETURN 2240 IFZZ>750THENPN=C3:GOTO2300 2250 REM IF ZZ>550 THEN PENA 6:RETURN 2260 REM IF ZZ>450 THEN PENA 7:RETURN 2270 REM IF ZZ>350 THEN PENA 12:RETURN 2280 REM IF ZZ>100 THEN PENA 12:RETURN 2290 GOSUB2450 2300 IFMC=0THENPN=C1 2310 RETURN 2320 REM ============================= 2330 REM *** BELOW SEA LEVEL *** 2340 IFZZ>-200THENGOSUB2410:RETURN 2350 REM IF ZZ>-500 THEN PENA 9:RETURN 2360 REM IF ZZ>-800 THEN PENA 10:RETURN 2370 REM IF ZZ>-1200 THEN PENA 11:RETURN 2380 REM PENA 11 2390 RETURN 2400 REM ============================= 2410 REM *** SWITCH TO SEA LEVEL COLOR *** 2420 PN=C1 2430 F1=1:RETURN 2440 REM ============================= 2450 REM *** SWITCH TO LAND COLOR *** 2460 IFMC=1THENPN=C2:GOTO2480 2470 PN=C1 2480 F1=0:RETURN 2490 REM ============================= 2500 REM *** ROTATION *** 2510 IFXX<>0THEN2540 2520 IFYY<=0THENRA=-PI/2:GOTO2560 2530 RA=PI/2:GOTO2560 2540 RA=ATN(YY/XX) 2550 IFXX<0THENRA=RA+PI 2560 R1=RA+RH:RD=SQR(XX*XX+YY*YY) 2570 XX=RD*COS(R1):YY=RD*SIN(R1) 2580 RETURN 2590 REM ============================= 2600 REM *** TILT DOWN *** 2610 RD=SQR(ZZ*ZZ+XX*XX) 2620 IFXX=0THENRA=PI/2:GOTO2650 2630 RA=ATN(ZZ/XX) 2640 IFXX<0THENRA=RA+PI 2650 R1=RA-VT 2660 XX=RD*COS(R1)+XX:ZZ=RD*SIN(R1) 2670 RETURN 2680 REM ============================= 2690 REM *** PLOT TO (XP,YP) *** 2700 GOSUB1980 2710 XX=XX*XS:YY=YY*YS:ZZ=ZZ*ZS 2720 GOSUB2500:REM *** ROTATE *** 2730 GOSUB2600:REM *** TILT UP *** 2740 IFXO=-999THENPR$="M":GOTO2760 2750 PR$="D" 2760 XP=INT(YY)+CX:YP=INT(ZZ) 2770 REM ============================= 2780 REM *** DO PLOTTING HERE *** 2790 GETA$:IFA$<>""THEN3120 2800 IFMC=1THENXP=XP/2 2810 XP=XP*.70:YP=140.47+.663*YP:IFPR$="M"THENX8=XP:Y8=YP 2820 SYSDRAW,X8,Y8TOXP,YP,PN:X8=XP:Y8=YP:XO=XP 2830 RETURN 2840 REM ============================= 2850 REM *** PLOT X AXIS *** 2860 FORAX=0TOMX:XO=-999:FORAY=0TOAX 2870 GOSUB1860:ZZ=D:YY=AY/MX*10000:XX=AX/MX*10000-YY/2 2880 GOSUB2690:NEXTAY:NEXTAX 2890 RETURN 2900 REM ============================= 2910 REM *** PLOT Y AXIS *** 2920 FORAY=0TOMX:XO=-999:FORAX=AYTOMX 2930 GOSUB1860:ZZ=D:YY=AY/MX*10000:XX=AX/MX*10000-YY/2 2940 GOSUB2690:NEXTAX:NEXTAY 2950 RETURN 2960 REM ============================= 2970 REM *** PLOT Z AXIS *** 2980 FOREX=0TOMX:XO=-999:FOREY=0TOMX-EX 2990 AX=EX+EY:AY=EY:GOSUB1860:ZZ=D:YY=AY/MX*10000 3000 XX=AX/MX*10000-YY/2:GOSUB2690:NEXTEY:NEXTEX 3010 RETURN 3020 REM ============================= 3030 REM *** SETUP SCREEN *** 3040 IFMC=1THENSYSHIRES,1,4,C2,C1,C3:GOTO3060 3050 SYSHIRES,0,4,C1 3060 POKE53280,4:TAX=AX:TAY=AY 3070 GOSUB2970:REM ** PLOT Z AXIS ** 3080 GOSUB2910:REM ** PLOT Y AXIS ** 3090 GOSUB2850:REM ** PLOT X AXIS ** 3100 GOSUB1390 3110 REM ============================= 3120 REM *** MAIN MENU SECTION *** 3130 SYSTEXT:PRINTCHR$(147) 3140 POKE53280,14:POKE53281,14 3150 PRINT" CURRENT SETTINGS:":PRINT 3160 IFMC=0THENPRINT" STANDARD BITMAP MODE" 3170 IFMC=1THENPRINT" MULTICOLOR BITMAP MODE" 3180 PRINT" SEALEVEL OPTION ";:IFSEALEVEL=0THENPRINT"OFF" 3190 IFSEALEVEL<>0THENPRINT"ON" 3200 PRINT" SCALE - X=";XS;" Y=";YS;" Z=";ZS 3210 PRINT" -) MAIN MENU (-" 3220 PRINT" 1 - START NEW LANDSCAPE" 3230 PRINT" 2 - DRAW EXISTING ARRAY" 3240 PRINT" 3 - DISPLAY CURRENT HIRES SCREEN" 3250 PRINT" 4 - SAVE FRACTAL ARRAY OR SCREEN" 3260 PRINT" 5 - LOAD FRACTAL ARRAY OR SCREEN" 3270 PRINT" 6 - RESET SCALING FACTORS" 3280 PRINT" 7 - SET SEA LEVEL OPTIONS" 3290 PRINT" 8 - SWITCH BITMAP MODE" 3300 PRINT" 9 - PRINT HIRES SCREEN" 3310 PRINT" 0 - EXIT TO BASIC" 3320 PRINT:PRINT 3330 PRINT" SELECTION (0-9) "; 3340 GETA$:IFA$<"0"ORA$>"9"THEN3340 3350 A=ASC(A$)-48:PRINTCHR$(147) 3360 ONAGOTO3410,4580,4290,3570,3890,4680,4340,4430,3490 3370 REM ============================= 3380 REM *** PROGRAM EXIT *** 3390 PRINTCHR$(147):END 3400 REM ============================= 3410 PRINT" ** START A NEW FRACTAL LANDSCAPE **" 3420 PRINT" ENTER NUMBER OF LEVELS (1-6)";:INPUTLE 3430 PRINTCHR$(147):IFLE<1ORLE>6THEN3420 3440 PRINT" PRESS ANY KEY TO START." 3450 PRINT" PRESS WHILE DRAWING TO ABORT." 3460 GOSUB1390:PRINTCHR$(147) 3470 GOTO1480 3480 REM ============================= 3490 PRINT "PRINT HIRES SCREEN TO COMMODORE PRINTER" 3500 PRINT "AS DEVICE 4":PRINT 3505 PRINT" PRESS 1 FOR 1/4 PAGE SIZE" 3507 PRINT" 2 FOR FULL PAGE SIZE" 3508 GETA$:IF A$<"1"ORA$>"2"THEN3508 3509 POKE2,2:IF A$="1" THEN POKE2,1 3510 IF MC=0 THEN SYSHIRES,0:GOTO 3530 3520 SYSHIRES,1 3530 SYS51232 3550 GOTO 3120 3560 REM ============================= 3570 PRINT" *** ARRAY OR SCREEN SAVE ***" 3580 NAME$="":SL=0:SH=0:EL=0:EH=0 3590 PRINT" TO SAVE THE SCREEN, THE COLOR SCREEN" 3600 PRINT" IS MOVED TO $5C00 AND THE BITMAP IS" 3610 PRINT" MOVED TO $6000 AND SAVED. THIS TRASHES" 3620 PRINT" THE ARRAY SO IF YOU WANT BOTH THEN" 3630 PRINT" SAVE THE ARRAY FIRST." 3640 PRINT" PRESS A TO SAVE ARRAY" 3650 PRINT" S TO SAVE HIRES SCREEN" 3660 PRINT" X TO EXIT" 3670 PRINT" SELECTION ";:INPUTA$ 3680 IFA$="A"THENA$="ARRAY":GOSUB3720:NAME$=NAME$+".ARY":GOTO3810 3690 IFA$="S"THENA$="SCREEN":GOSUB3720:NAME$=NAME$+".SCN":GOTO3740 3700 IFA$<>"X"THEN3670 3710 PRINTCHR$(147):GOTO3120:REM EXIT 3720 PRINT" EXTENSION '.ARY' OR '.SCN' IS ADDED TO YOUR FILENAME" 3730 PRINT" SAVE ";A$;" AS -> ";:INPUTNAME$:RETURN 3740 DATA 120,169,48,133,1,160,0,162,4,32,237,203,169,224,141,239,203,162 3750 DATA 32,32,237,203,169,55,133,1,88,96,185,0,204,153,0,92,200,208,247,238 3760 DATA 239,203,238,242,203,202,208,238,96 3770 FOR I=52177 TO 52223:READ A:POKE I,A:NEXT I 3780 SYS 52177:REM MOVE SCREEN DOWN TO $5C00 3790 SL=0:SH=92:EL=0:EH=128 3800 GOTO3850 3810 D(0,33)=LE:D(1,33)=MX:D(2,33)=MY:D(3,33)=TAX:D(4,33)=TAY 3820 D(5,33)=XS:D(6,33)=YS:D(7,33)=ZS:D(8,33)=SEALEVEL:D(9,33)=MC 3830 SL=PEEK(47):SH=PEEK(48):EL=PEEK(49):EH=PEEK(50) 3840 REM BSAVE NAME$,A%,L% 3850 SYS57812(NAME$),8:POKE193,SL:POKE194,SH:POKE174,EL:POKE175,EH:SYS62954 3860 PRINTCHR$(147) 3870 GOTO4240 3880 REM ============================= 3890 PRINT" *** ARRAY OR SCREEN LOAD ***" 3900 NAME$="" 3910 PRINT" THE SCREEN IS LOADED AT $5C00 " 3915 PRINT"THE COLOR SCREEN IS MOVED UP TO $CC00" 3930 PRINT"AND THE BITMAP IS MOVED TO $E000" 3940 PRINT" THIS TRASHES THE ARRAY SO IF YOU " 3950 PRINT"WANT TO LOAD BOTH THEN LOAD THE" 3960 PRINT"HIRES SCREEN FIRST." 3970 PRINT" PRESS A TO LOAD ARRAY" 3980 PRINT" S TO LOAD HIRES SCREEN" 3990 PRINT" X TO EXIT" 4000 PRINT" SELECTION ";:INPUTA$ 4010 IFA$="A"THENA$="ARRAY":GOSUB4050:NAME$=NAME$+".ARY":GOTO4090 4020 IFA$="S"THENA$="SCREEN":GOSUB4050:NAME$=NAME$+".SCN":GOTO4080 4030 IFA$<>"X"THEN4000 4040 PRINTCHR$(147):GOTO3120:REM EXIT 4050 PRINT"ENTER THE FILENAME WITHOUT THE EXTENSION '.ARY' OR '.SCN'" 4060 PRINT" NAME OF ";A$;" TO LOAD -> ";:INPUTNAME$:RETURN 4070 RETURN 4080 REM LOAD SCREEN 4082 SYS57812(NAME$),8:POKE195,0:POKE196,92:POKE780,0:SYS62626 4084 FOR I=0TO1023:POKE52224+I,PEEK(23552+I:NEXT 4086 FOR I=0TO8191:POKE57344+I,PEEK(24576+I:NEXT:GOTO 4240 4090 REM LOAD ARRAY 4100 SYS57812(NAME$),8:POKE195,PEEK(47):POKE196,PEEK(48):POKE780,0:SYS62626 4110 LE=D(0,33):MX=D(1,33):MY=D(2,33):AX=D(3,33):AY=D(4,33) 4120 XS=D(5,33):YS=D(6,33):ZS=D(7,33):SEALEVEL=D(8,33):MC=D(9,33) 4130 PRINTCHR$(147) 4140 PRINT"ARRAY NAME -> ";NAME$ 4150 PRINT"NUMBER OF LEVELS -> ";LE 4160 IFSEALEVEL=0THENLEVEL$="OFF":GOTO4180 4170 LEVEL$="ON" 4180 PRINT"SEA LEVEL DISPLAY -> ";LEVEL$ 4190 IFMC=0THENPRINT"BITMAP MODE -> STANDARD" 4200 IFMC=1THENPRINT"BITMAP MODE -> MULTICOLOR" 4210 PRINT"SCALING VALUES -> X=";XS 4220 PRINT" Y=";YS 4230 PRINT" Z=";ZS 4240 PRINT" PRESS ANY KEY TO CONTINUE" 4250 GOSUB1390 4260 PRINTCHR$(147) 4270 GOTO3120 4280 REM ============================= 4290 REM ** REDISPLAY BITMAP SCREEN ** 4300 IFMC=1THENSYSHIRES,1:GOTO4320 4310 SYSHIRES,0 4320 POKE53280,4:GOSUB1390:GOTO3120 4330 REM ============================= 4340 PRINT" *** SET SEA LEVEL OPTION ***" 4350 PRINT" DISPLAY SEA LEVEL SURFACE (Y/N) ";:INPUTA$ 4360 IFA$="Y"THEN GOTO4390 4370 SEALEVEL=0:IF MC=0 THEN C1=11:GOTO4410 4380 C1=5:C2=11:C3=1:GOTO4410 4390 SEALEVEL=1:IF MC=0 THEN C1=11:GOTO4410 4400 C1=6:C2=5:C3=11 4410 PRINTCHR$(147):GOTO 3120 4420 REM ============================= 4430 PRINT" *** SET BITMAP MODE ***" 4440 PRINT" (S)TANDARD BITMAP" 4450 PRINT" (M)ULTICOLOR BITMAP" 4460 PRINT" SELECT BITMAP MODE (S/M):";:INPUTA$ 4470 IF A$="M" THEN 4490 4480 MC=0:C1=11:GOTO4510 4490 MC=1:IF SEALEVEL=0 THEN C1=5:C2=11:C3=1:GOTO 4510 4500 C1=6:C2=5:C3=11 4510 PRINTCHR$(147):GOTO 3120 4520 REM ============================= 4530 REM *** ERROR TRAP *** 4540 REM ONERRORGOTO4540 4550 A=0 4560 GOTO3120 4570 REM ============================= 4580 PRINT" *** REDRAW OLD ARRAY ***" 4590 IFLE=0THEN3120 4600 RH=PI*30/180:VT=RH*1.2 4610 PRINT" CLEAR SCREEN BEFORE RE-DRAW (Y/N):";:INPUTA$ 4620 PRINTCHR$(147) 4630 IFA$="Y"THEN GOTO 3030 4640 POKE53280,4:IFMC=1THENSYSHIRES,1:GOTO4660 4650 SYSHIRES,0 4660 GOTO 3060 4670 REM ============================= 4680 REM *** SCALING SETTINGS *** 4690 SYSTEXT:PRINTCHR$(147) 4700 PRINT" CURRENT SCALING SETTINGS :" 4710 PRINT:PRINT" X=";XS 4720 PRINT" Y=";YS 4730 PRINT" Z=";ZS 4740 PRINT" PRESS C TO CHANGE SETTINGS" 4750 PRINT" D FOR DEFAULT SETTINGS" 4760 PRINT" X TO EXIT" 4770 REM GOSUB4500 4780 PRINT" SELECTION ";:INPUTA$ 4790 IFA$="C"THEN4840 4800 IFA$="D"THENGOSUB4870:GOTO4830 4810 IFA$<>"X"THEN4830 4820 PRINTCHR$(147):GOTO3120 4830 PRINTCHR$(147):GOTO4700 4840 PRINT" INPUT NEW X,Y,Z ";:INPUTXS,YS,ZS 4850 GOTO4830 4860 REM ============================= 4870 REM *** STOCK SCALING FACTORS *** 4880 XS=.04:YS=.04:ZS=.05:RETURN 4890 REM ============================= 4900 REM **** ERROR TRAP **** 4910 FMEM%=FRE(1) 4920 REM "RATS - AN ERROR OCCURRED" 4930 SYSTEXT:PRINTCHR$(147) 4950 PRINT"THERE ARE ";FMEM%;" BYTES OF MEMORY " 4955 PRINT" PRESS 'E' TO EXIT TO BASIC" 4960 PRINT" PRESS ANY KEY TO CONTINUE...." 4970 GOSUB1390 4980 PRINTCHR$(147) 4985 IF A$="E" THEN END 4990 GOTO3120